001 /* 002 * Copyright 2004 Niclas Hedhman 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.util; 020 021 import net.dpml.transit.Transit; 022 023 import java.util.Properties; 024 import java.util.Iterator; 025 import java.util.Map; 026 import java.util.ArrayList; 027 import java.net.URL; 028 import java.io.IOException; 029 import java.io.InputStream; 030 import java.io.InputStreamReader; 031 import java.io.BufferedReader; 032 033 /** 034 * Utility class supporting operations related to property retrival. 035 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 036 * @version 1.0.1 037 */ 038 public final class Util 039 { 040 // ------------------------------------------------------------------------ 041 // static 042 // ------------------------------------------------------------------------ 043 044 /** 045 * Read a set of properties from a property file specificed by a url. 046 * Property files may reference symbolic properties in the form ${name}. 047 * @param propsUrl the url of the property file to read 048 * @return the resolved properties 049 * @exception IOException if an io error occurs 050 */ 051 public static Properties readProps( URL propsUrl ) 052 throws IOException 053 { 054 return readProps( propsUrl, true ); 055 } 056 057 /** 058 * Read a set of properties from a property file specificed by a url. 059 * Property files may reference symbolic properties in the form ${name}. 060 * @param propsUrl the url of the property file to read 061 * @param resolve if TRUE apply property symbol resolution 062 * @return the resolved properties 063 * @exception IOException if an io error occurs 064 */ 065 public static Properties readProps( URL propsUrl, boolean resolve ) 066 throws IOException 067 { 068 InputStream stream = propsUrl.openStream(); 069 try 070 { 071 Properties p = new Properties(); 072 p.load( stream ); 073 if( resolve ) 074 { 075 p.setProperty( Transit.HOME_KEY, Transit.DPML_HOME.toString() ); 076 Iterator list = p.entrySet().iterator(); 077 while ( list.hasNext() ) 078 { 079 Map.Entry entry = (Map.Entry) list.next(); 080 String value = (String) entry.getValue(); 081 value = resolveProperty( p, value ); 082 entry.setValue( value ); 083 } 084 } 085 return p; 086 } 087 finally 088 { 089 stream.close(); 090 } 091 } 092 093 /** 094 * Resolve symbols in a supplied value against supplied known properties. 095 * @param props a set of know properties 096 * @param value the string to parse for tokens 097 * @return the resolved string 098 */ 099 public static String resolveProperty( Properties props, String value ) 100 { 101 value = PropertyResolver.resolve( props, value ); 102 return value; 103 } 104 105 /** 106 * Return the value of a property. 107 * @param props the property file 108 * @param key the property key to lookup 109 * @param def the default value 110 * @return the resolve value 111 */ 112 public static String getProperty( Properties props, String key, String def ) 113 { 114 String value = props.getProperty( key, def ); 115 if( value == null ) 116 { 117 return null; 118 } 119 if( "".equals( value ) ) 120 { 121 return value; 122 } 123 value = PropertyResolver.resolve( props, value ); 124 return value; 125 } 126 127 /** 128 * Read a file and return the list of lines in an array of strings. 129 * @param listFile the url to read from 130 * @return the lines 131 * @exception IOException if a read error occurs 132 */ 133 public static String[] readListFile( URL listFile ) 134 throws IOException 135 { 136 ArrayList list = new ArrayList(); 137 InputStream stream = openInputStream( listFile ); 138 try 139 { 140 InputStreamReader isr = new InputStreamReader( stream, "UTF-8" ); 141 BufferedReader reader = new BufferedReader( isr ); 142 String line = reader.readLine(); 143 while ( line != null ) 144 { 145 list.add( line ); 146 line = reader.readLine(); 147 } 148 String[] items = new String[ list.size() ]; 149 list.toArray( items ); 150 return items; 151 } 152 finally 153 { 154 stream.close(); 155 } 156 } 157 158 private static InputStream openInputStream( URL url ) throws IOException 159 { 160 try 161 { 162 return url.openStream(); 163 } 164 catch( IOException e ) 165 { 166 System.out.println( "#URL: " + url ); 167 System.out.println( e.toString() ); 168 throw e; 169 } 170 } 171 172 // ------------------------------------------------------------------------ 173 // constructor 174 // ------------------------------------------------------------------------ 175 176 /** 177 * Constructor. 178 */ 179 private Util() 180 { 181 } 182 }